const config  = require('../../config')[process.env.RUN_CONF];
const mysql = require('mysql');
const info =require('debug')('log:info');
var db =Object.assign({
	connectionLimit:10
},config.mysql);
var pool  = mysql.createPool(db);  
var dbFun = {};
/**
	rest[0] 可选，如果是数组，支持"?"和"??"(替代表名 列名等数据库敏感字段)占位符，如果是对象支持":"占位符
	rest[1] callback
	如果是插入单行语句 result.insertId 是自增ID
	如果批量插入语句，使用"insert into tableName(col1,col2) values ?" 占位符传数组
**/
dbFun.queryCall = function(sql, ...rest){  
    if (!sql) {  
        callback();  
        return;  
    }
    if(rest.length == 2){
    	if(rest[0].constructor ===Object){
    		sql = dbFun.nameFormat(sql,rest[0]);
    	}
    	else if(rest[0].constructor === Array){
    		sql = mysql.format(sql,rest[0]);
    	}
    }
  	var callback = rest[rest.length-1];
  	// callback(null,[arr.constructor,obj.constructor,arr.constructor===Object,obj.constructor===Object]);
    pool.query(sql, function(err, result, fields) {  
      if (err) {  
        console.error(err);  
        callback(err, null);  
        return;  
  	  }
      callback(null, result, fields);  
    });  
}
// 提供外部调用自行format
dbFun.nameFormat=function (query, values) {
  if (!values) return query;
  return query.replace(/\:(\w+)/g, function (txt, key) {
    if (values.hasOwnProperty(key)) {
      return pool.escape(values[key]);
    }
    return txt;
  }.bind(pool));
};
dbFun.query = (sql, values={})=>{
  return new Promise(( resolve, reject ) => {
      if (!sql) {  
          reject('No Sql');  
          return;  
      }
      if(values.constructor ===Object){
        sql = dbFun.nameFormat(sql,values);
      }
      else if(values.constructor === Array){
        sql = mysql.format(sql,values);
      }
      pool.query(sql, function(err, result, fields) {  
        if (err) {  
          console.error(err);  
          reject(err);  
          return;  
        }
        resolve( result, fields);  
      });  
  })
}
pool.on('error', function (err) {
    console.error('db error', err);
    // 如果是连接断开，自动重新连接
    // if (err.code === 'PROTOCOL_CONNECTION_LOST') {
    //     handleError();
    // } else {
    //     throw err;
    // }
});
// function handleError () {

//     //连接错误，2秒重试
//     conn.connect(function (err) {
//         if (err) {
//             console.log('error when connecting to db:', err);
//             setTimeout(handleError , 2000);
//         }
//     });

//     pool.on('error', function (err) {
//         console.log('db error', err);
//         // 如果是连接断开，自动重新连接
//         if (err.code === 'PROTOCOL_CONNECTION_LOST') {
//             handleError();
//         } else {
//             throw err;
//         }
//     });
// }
module.exports = dbFun; 